//重新排列字符串
/*给你一个字符串 s 和一个 长度相同 的整数数组 indices 。

请你重新排列字符串 s ，其中第 i 个字符需要移动到 indices[i] 指示的位置。

返回重新排列后的字符串。
s.length == indices.length == n
1 <= n <= 100
s 仅包含小写英文字母
0 <= indices[i] < n
indices 的所有的值都是 唯一 的
*/
struct Data {
    char val;
    int index;
};
typedef struct Data Data;
int compar(const void* q1, const void* q2) {
    return (((Data*)(q1))->index - ((Data*)(q2))->index);
}
char* restoreString(char* s, int* indices, int indicesSize) {
    char* arr = (char*)calloc(indicesSize + 1, sizeof(char));
    Data nums[indicesSize];
    for (int i = 0; i < indicesSize; i++) {
        nums[i].val = s[i];
        nums[i].index = indices[i];
    }
    qsort(nums,indicesSize,sizeof(Data),compar);
    for (int i = 0; i < indicesSize; i++) {
        arr[i] = nums[i].val;
    }
    return arr;
}



//是否所有 1 都至少相隔 k 个元素
/*给你一个由若干 0 和 1 组成的数组 nums 以及整数 k。如果所有 1 都至少相隔 k 个元素，则返回 true ；否则，返回 false 。
1 <= nums.length <= 105
0 <= k <= nums.length
nums[i] 的值为 0 或 1
*/
bool kLengthApart(int* nums, int numsSize, int k) {
    int slow = 0;
    while (slow < numsSize && nums[slow] == 0) {
        slow++;
    }
    
    int quick = slow + 1;
    int count = 0;
    while (quick < numsSize) {
        if (nums[quick] == 1) {
            if (count < k)
                return false;
            count = 0;
        } else {
            count++;
        }
        quick++;
    }
    return true;
}